#ifndef _MYSTACK_H

#define datatype int
#define MAXSIZE 100
//顺序栈类型说明 
typedef struct seqStack{
    datatype a[MAXSIZE];
    int top;
}SEQSTACK;
//typedef struct seqStack SEQSTACK;

//结点类型说明 
typedef struct node{
    datatype data;
    struct node *next;
}NODE;

//链栈类型说明 
typedef struct linkStack{
    NODE *top;
    int length;
}LINKSTACK;

//顺序栈的常用操作 
SEQSTACK *init_seqstack();//顺序栈的初始化 ，建立一个空的顺序栈
void push_seqstack(SEQSTACK *ss,datatype x); //入栈操作，不成功输出提示语 
datatype pop_seqstack(SEQSTACK *ss); //出栈操作，成功返回出栈的元素，不成功输出提示语 
datatype gettop_seqstack(SEQSTACK *ss);//得到栈顶元素 
int full_seqstack(SEQSTACK *ss);//判断栈是否已满，返回0代表不满，非0代表已满 
int empty_seqstack(SEQSTACK *ss);//判断栈是否为空，返回0代表不空，非0代表为空 
void print_seqstack(SEQSTACK *ss);//输出栈中元素，从栈底开始到栈顶 

//链栈的常用操作 
LINKSTACK *init_linkstack();//链栈的初始化 ，建立一个空的链栈
void push_linkstack(LINKSTACK *ss,datatype x); //入栈操作，不成功输出提示语 
datatype pop_linkstack(LINKSTACK *ss); //出栈操作，成功返回出栈的元素，不成功输出提示语 
datatype gettop_linkstack(LINKSTACK *ss);//得到栈顶元素 
//链栈不需要判断栈已满 
int empty_linkstack(LINKSTACK *ss);//判断栈是否为空，返回0代表不空，非0代表为空 
void print_linkstack(LINKSTACK *ss);//输出栈中元素，从栈底开始到栈顶 



#endif
